home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / os2 / vsoup11.zip / sema.hh < prev    next >
Text File  |  1996-07-29  |  2KB  |  67 lines

  1. //  $Id: sema.hh 1.6 1996/07/29 22:20:46 hardy Exp $
  2. //
  3. //  This progam/module was written by Hardy Griech based on ideas and
  4. //  pieces of code from Chin Huang (cthuang@io.org).  Bug reports should
  5. //  be submitted to rgriech@ibm.net.
  6. //
  7. //  This file is part of soup++ for OS/2.  Soup++ including this file
  8. //  is freeware.  There is no warranty of any kind implied.  The terms
  9. //  of the GNU Gernal Public Licence are valid for this piece of software.
  10. //
  11.  
  12.  
  13. #ifndef __SEMA_HH__
  14. #define __SEMA_HH__
  15.  
  16.  
  17. #if defined(OS2)  &&  defined(__MT__)
  18.  
  19. #define INCL_DOSSEMAPHORES
  20. #include <os2.h>
  21.  
  22. class TSemaphor {
  23. private:
  24.     HMTX Sema;
  25. public:
  26.     TSemaphor( void )    { DosCreateMutexSem( (PSZ)NULL, &Sema, 0, FALSE ); }
  27.     ~TSemaphor()         { DosCloseMutexSem( Sema ); }
  28.     void Request( void ) { DosRequestMutexSem( Sema,SEM_INDEFINITE_WAIT ); }
  29.     void Release( void ) { DosReleaseMutexSem( Sema ); }
  30. };
  31.  
  32.  
  33. class TEvSemaphor {
  34. private:
  35.     HEV Sema;
  36. public:
  37.     TEvSemaphor( void )                            { DosCreateEventSem( (PSZ)NULL, &Sema, 0, FALSE ); }
  38.     ~TEvSemaphor()                                 { DosCloseEventSem( Sema ); }
  39.     void Post( void )                              { DosPostEventSem( Sema ); }
  40.     void Wait( long timeMs = SEM_INDEFINITE_WAIT,
  41.            int resetSema = 1 )                 { if (DosWaitEventSem(Sema,timeMs) == 0) { if (resetSema) Reset();} }
  42.     void Reset( void )                             { unsigned long ul;  DosResetEventSem( Sema,&ul ); }
  43. };
  44.  
  45. #else
  46.  
  47. class TSemaphor {
  48. public:
  49.     TSemaphor( void )    {}
  50.     ~TSemaphor()         {}
  51.     void Request( void ) {}
  52.     void Release( void ) {}
  53. };
  54.  
  55.  
  56. class TEvSemaphor {
  57. public:
  58.     TEvSemaphor( void )      {}
  59.     ~TEvSemaphor()           {}
  60.     void Post( void )        {}
  61.     void Wait( long timeMs ) {}
  62.     void Reset( void )       {}
  63. #endif
  64.  
  65.  
  66. #endif  // __SEMA_HH__
  67.